package com.xyhy.starter.redis.code;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.core.RedisTemplate;

import lombok.Setter;

/**
 * @author Fire Team - Robert
 * @Description 编码生成工具类<br>
 * 规则为：首字母 + 当前日期 + 四位递增数字<br>
 * 如：SPRT202012120001
 * @date 2020年12月28日
 */
@Setter
public class CodeTemplate {
  private RedisTemplate<String, Object> redisTemplate;

  public String generate(String flag) {
    DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
    String nowDate = dateTimeFormatter.format(LocalDate.now());

    String key = String.format("sys:autoCode:%s_%s", flag.toLowerCase(), nowDate);
    Long index = redisTemplate.opsForValue().increment(key, 1);

    if (null != index && index == 1) {
      redisTemplate.expire(key, 1, TimeUnit.DAYS);
    }

    return String.format("%s%s%04d", flag, nowDate, index);
  }

}
